package br.com.sap.controle;

import java.util.Iterator;
import java.util.List;

import br.com.sap.modelo.Categoria;
import br.com.sap.modelo.Marca;
import br.com.sap.modelo.Tipo;
import br.com.sap.modelo.TipoMarca;
import br.com.sap.modelo.enums.EnumSituacao;
import br.com.sap.persistencia.servico.CategoriaServico;
import br.com.sap.persistencia.servico.MarcaServico;
import br.com.sap.persistencia.servico.ServicoGenerico;
import br.com.sap.persistencia.servico.TipoMarcaServico;
import br.com.sap.persistencia.servico.TipoServico;

public class TipomarcaControle extends ControleGenerico<TipoMarca> {

	private TipoMarca tipoMarca = new TipoMarca();
	private MarcaControle marcaControle = new MarcaControle();
	private TipoMarcaServico tipoMarcaServico = new TipoMarcaServico();
	private TipoServico tipoServico = new TipoServico();
	private MarcaServico marcaServico = new MarcaServico();
	private CategoriaServico categoriaServico = new CategoriaServico();
	private ControleGenerico<TipoMarca> controleGenerico;

	public CategoriaServico getCategoriaServico() {
		return categoriaServico;
	}

	public void setCategoriaServico(CategoriaServico categoriaServico) {
		this.categoriaServico = categoriaServico;
	}

	public TipoMarca getTipoMarca() {
		return tipoMarca;
	}

	public void setTipoMarca(TipoMarca tipoMarca) {
		this.tipoMarca = tipoMarca;
	}

	public MarcaControle getMarcaControle() {
		return marcaControle;
	}

	public void setMarcaControle(MarcaControle marcaControle) {
		this.marcaControle = marcaControle;
	}

	public MarcaServico getMarcaServico() {
		return marcaServico;
	}

	public void setMarcaServico(MarcaServico marcaServico) {
		this.marcaServico = marcaServico;
	}

	public TipoMarcaServico getTipoMarcaServico() {
		return tipoMarcaServico;
	}

	public void setTipomarcaServico(TipoMarcaServico tipoMarcaServico) {
		this.tipoMarcaServico = tipoMarcaServico;
	}

	public TipoServico getTipoServico() {
		return tipoServico;
	}

	public void setTipoServico(TipoServico tipoServico) {
		this.tipoServico = tipoServico;
	}

	public ControleGenerico<TipoMarca> getControleGenerico() {
		return controleGenerico;
	}

	public void setControleGenerico(ControleGenerico<TipoMarca> controleGenerico) {
		this.controleGenerico = controleGenerico;
	}

	@Override
	public ServicoGenerico<TipoMarca> getServico() {
		// TODO Auto-generated method stub
		return this.tipoMarcaServico;
	}

	public List<Categoria> getListarCategoria() {
		return categoriaServico.getLista();
	}

	public List<Tipo> getListarTipo(Categoria categoria) {
		tipoServico.camposProcura.limpar();
		if (categoria != null) {
			tipoServico.camposProcura.add("categoria", categoria.getId()
					.toString(), true);

		} else {
			System.out.println("CATEGORIA NULL");
			return null;
		}

		return tipoServico.procura();

	}

	public List<Marca> getListarMarca() {

		marcaServico.camposProcura.limpar();
		marcaServico.camposProcura.add("situacao", "1", true);
		marcaServico.camposProcura.setCondicional("and");
		return marcaServico.procura();
	}
	
	public List<TipoMarca> getListartipomarcaDesativada() {
		
		tipoMarcaServico.camposProcura.limpar();
		this.getServico().camposProcura.add(("situacao"), "0", true);
		this.getServico().camposProcura.setCondicional("and");
		return tipoMarcaServico.procura();
}

	public List<TipoMarca> getListartipomarcas() {

		tipoMarcaServico.camposProcura.limpar();
		this.getServico().camposProcura.add(("situacao"), "1", true);
		this.getServico().camposProcura.setCondicional("and");
		return tipoMarcaServico.procura();
	}
	

	public List<TipoMarca> getListartipomarcasporid(Marca marca, String situacao) {

		tipoMarcaServico.camposProcura.limpar();
		this.getServico().camposProcura.add(("marca"), marca.getId().toString(), true);
		this.getServico().camposProcura.add(("situacao"), situacao, true);
		this.getServico().camposProcura.setCondicional("and");
		return tipoMarcaServico.procura();
	}

	public List<TipoMarca> getListartiposDesativadas() {

		tipoMarcaServico.camposProcura.limpar();
		this.getServico().camposProcura.add(("situacao"), "0", true);
		this.getServico().camposProcura.setCondicional("and");
		return tipoMarcaServico.procura();
	}

	public List<TipoMarca> procuraTipoMarca(String descricao, String situacao){
		Marca marca = new Marca();
		marca.setDescricao(descricao);
		List<Marca> marcas = marcaControle.getListarmarcasativas(marca);
		if(marcas.size() != 0){
		Marca marcaServico = marcas.get(0);
		tipoMarcaServico.camposProcura.limpar();
		this.getServico().camposProcura.add(("marca"), marcaServico.getId().toString(), true);
		this.getServico().camposProcura.add(("situacao"), situacao, true);	
		this.getServico().camposProcura.setCondicional("and");
		
		}
		
		return tipoMarcaServico.procura();
	}
	
	
	public int registrarTipoMarca(TipoMarca tipoMarca, Marca marca) {
		int retorno;
		retorno = 0;

		if (antesProcurar(marca)) {

			

			
			if (tipoMarca.getId() == null) {
				
				tipoMarca.setStatus(1);
				tipoMarca.setSituacao(EnumSituacao.ATIVO);
				tipoMarca.setMarca(marca);
				
				List<Marca> marcas = marcaControle.getListarmarcasativas(marca);
			if (marcas.size() == 0) {
				if (marcaControle.registrarMarca(marca)) {
					List<Marca> marcacadastrada = marcaControle
							.getListarmarcasativas(marca);
					Marca marcaServico = marcacadastrada.get(0);
					tipoMarca.setMarca(marcaServico);

					if (persiste(tipoMarca)) {
						retorno = 1;
					} else {
						retorno = 2;
					}
				}

			} else {
				
				if (marcas.size() == 1) {
					
						Marca marcaServico = marcas.get(0);
						tipoMarca.setMarca(marcaServico);
							
						if (persiste(tipoMarca)) {
							retorno = 1;
						} else {
							retorno = 2;
						}
					}
				}
				} else {
					Marca marcaalterada = marcaControle.getServico().getById(marca.getId());
					if (marcaalterada != null) {
						marcaalterada.setDescricao(marca.getDescricao());
						
						marcaControle.registrarMarca(marcaalterada);
				}

			}
		}
		return retorno;
	}

	public int desativarMarca(Marca marca) {
		int retorno;
		retorno = 0;

		tipoMarca.setSituacao(EnumSituacao.INATIVO);

		if (persiste(tipoMarca)) {

			retorno = 1;

		} else {

			retorno = 2;

		}

		return retorno;

	}
	
	public void desativartodostipoMarca(Marca marca){
		
		List<TipoMarca> listartipomarcasporid = getListartipomarcasporid(marca, "1");
		
		for (int i = 0; i < listartipomarcasporid.size(); i++) {
			
			TipoMarca tipoMarca = listartipomarcasporid.get(i);
			tipoMarca.setSituacao(EnumSituacao.INATIVO);
			persiste(tipoMarca);
		}
		
		marca.setSituacao(EnumSituacao.INATIVO);
		marcaControle.persiste(marca);
	}
	
	public boolean desativartipoMarca(TipoMarca tipoMarca){
		boolean retorno;
		retorno = false;
		
		tipoMarca.setSituacao(EnumSituacao.INATIVO);
		if(persiste(tipoMarca)){
			retorno = true;
		}else{
			retorno = false;
		}
		
		return retorno;
		
	}
	
	public boolean ativartipoMarca(TipoMarca tipoMarca){
		boolean retorno;
		retorno = false;
		
		tipoMarca.setSituacao(EnumSituacao.ATIVO);
		if(persiste(tipoMarca)){
			retorno = true;
		}else{
			retorno = false;
		}
		
		return retorno;
		
	}
	
	public void ativartodostipoMarca(Marca marca){
		
		List<TipoMarca> listartipomarcasporid = getListartipomarcasporid(marca, "0");
		
		for (int i = 0; i < listartipomarcasporid.size(); i++) {
			
			TipoMarca tipoMarca = listartipomarcasporid.get(i);
			tipoMarca.setSituacao(EnumSituacao.ATIVO);
			persiste(tipoMarca);
		}
		
		marca.setSituacao(EnumSituacao.ATIVO);
		marcaControle.persiste(marca);
	}

	public List<TipoMarca> ListartipoMarcabox(String buscar) {
		TipoMarca tipoMarca = new TipoMarca();
		Marca marca = new Marca();

		if (buscar != "") {

			marca.setDescricao(buscar);

			List<Marca> marcas = marcaControle.getListarmarcasativas(marca);

			if (marcas.size() == 1) {
				Marca marcaServico = marcas.get(0);
				tipoMarca.setMarca(marcaServico);

				System.out.print(tipoMarca.getMarca().toString());
				// tipoMarcaServico.camposProcura.limpar();
				System.out.print(tipoMarca.getMarca().getId().toString());
				this.getServico().camposProcura.add(("marca"), tipoMarca
						.getMarca().getId().toString(), true);
				this.getServico().camposProcura.add(("situacao"), "1", true);
				this.getServico().camposProcura.setCondicional("and");
				this.getServico().addOrdem("marca", "asc");
				return tipoMarcaServico.procura();

			} else {

				return null;

			}
		} else {
			this.getServico().camposProcura.add(("situacao"), "1", true);
			this.getServico().camposProcura.setCondicional("and");
			this.getServico().addOrdem("marca", "asc");
			return tipoMarcaServico.procura();

		}

	}

}